#ifndef MYSERVERTEST_H
#define MYSERVERTEST_H

#include <QMainWindow>
#include "mysercertestsetting.h"
#include <QLabel>
#include <QStandardItemModel>
#include <QItemSelectionModel>
#include <QInputDialog>
#include "mytcpprogress.h"
#include <QCloseEvent>


namespace Ui {
class myServerTest;
}

class myServerTest : public QMainWindow
{
    Q_OBJECT

public:
    explicit myServerTest(QWidget *parent = nullptr);
    ~myServerTest();

    void refreshView();//用于刷新窗口界面

    int currentActiveConnectCount();//计算当前活跃的连接

private slots:
    void on_actSetServerMain_triggered();

    void on_actAppendMain_triggered();

    void on_actSetMaxCount_triggered();

    void onProgressConnect(QString add,int index);//响应线程中连接服务器成功的槽函数

    void onProgressDisonnect(QString add,int index);//响应线程中连接服务器成功的槽函数

    void on_progress_newMessage(QByteArray recData,int index);//当子线程接收到消息时

    void onTimer1Out();//用于响应timer1的槽函数

    void on_actDeleteMain_triggered();

    void on_actDeleteAllMain_triggered();

    void on_actQuitMain_triggered();

    void on_actSendMessageMain_triggered();

signals:
    void newTcpServiceProgress(QString address,int port,int index);//用于主线程控制子线程创建tcp客户端的信号

    void sendMessage(QByteArray sendData,int index);//用于主线程发送消息

    void gotoDisconnect(int);//用于主线程控制子线程释放资源

protected:
    void closeEvent(QCloseEvent* e);//重写关闭函数,保证关闭窗口前释放所有资源

private:
    Ui::myServerTest *ui;

    QString m_serverAddress;//用于保存服务器地址
    int m_serverPort;//用于保存服务器端口
    QList<mytcpprogress*> m_progressList;//用于保存多线程程序连接
    QList<QThread*> m_threadList;//用于保存每个程序的线程指针
    QList<bool> m_progressStatueList;//用于记录该线程与服务器的连接状态
//    int m_connectCount;//用于保存连接服务器的进程数量
    int m_maxCount;//用于保存最大的线程数量,进程数量不能超过此值

    QLabel m_statueLabel1;//用于状态栏显示服务器地址
    QLabel m_statueLabel2;//用于状态栏显示服务器端口
    QLabel m_statueLabel3;//用于显示当前活跃的连接数量

    QStandardItemModel* m_ModelMain;
    QItemSelectionModel m_selectionMain;

    QTimer* m_timer1;//用于新建连接时统计连接数据的定时器

    //用于添加新建连接时的总响应数量,连接成功数量,连接失败数量计数
    int m_connectTotalCount;
    int m_connectSuccesCount;
    int m_connectFalseCount;

};

#endif // MYSERVERTEST_H
